import os.path
import sys


def menu():
    print("---------------------------------------------------")
    print("1. 新增学生")
    print("2. 显示学生")
    print("3. 查找学生")
    print("4. 删除学生")
    print("0. 退出系统")
    print("---------------------------------------------------")

    choice = input("请输入选择: ")
    return choice

# 用一个全局变量存学生信息
# 该全局变量为列表，列表中每个元素都是字典，字典中存放一个学生的所有信息
students = []

def save():
    # 存储学生信息
    with open('data.txt','w',encoding='utf8') as f:
        for s in students:
            f.write(f"{s['studentId']}\t{s['name']}\t{s['gender']}\t{s['className']}")
        print(f'[存储数据成功] 共存储了 {len(students)} 条数据')

def load():
    # 读档
    # 如果文件不存在，直接返回，不再读档
    if not os.path.exists('data.txt'):
        return

    # 读档前保证students中没有数据
    global students
    students = []

    with open('data.txt', 'r', encoding='utf8') as f:
        for line in f:  # 每次切分f的一行（一个学生数据）
            line.strip()    # 去掉字符串两边的空格
            tokens = line.split('\t')   # 以'\t'为分隔符分割line - 返回值是list(列表)
            if len(tokens) != 4:
                print(f"当前行格式有问题: line={line}")
                continue
            # 此时切分完成
            student = {
                'studentId' : tokens[0],
                'name' : tokens[1],
                'gender' : tokens[2],
                'className' : tokens[3]
            }
            # 将元素读取到students中
            students.append(student)
        print(f"[读取数据成功] 共读取了 {len(students)} 条数据")
def Add():
    print("[新增学生]: 开始")
    # 学号
    studentId = input("输入学号: ")
    # 姓名
    name = input("输入姓名: ")
    # 性别
    gender = input("输入性别: ")
    # 判断性别是否有误
    # if(gender not in('男', '女')):
    #     print("输入性别不符合要求: 新增学生失败")
    #     return
    # 班级
    className = input("输入班级: ")

    # 用字典将学生信息聚合
    student = {
        'studentId' : studentId,
        'name' : name,
        'gender' : gender,
        'className' : className
    }

    global students
    students.append(student)    #将该学生写入列表中

    # 保存学生信息
    save()

    print("[新增学生]: 完成")

def Display():
    print("[显示学生]: 开始")
    for s in students:
        print(f"[{s['studentId']}]\t{s['name']}\t{s['gender']}\t{s['className']}")
    print(f'[显示学生] 完成:  共显示了 {len(students)} 条数据!')

def Find():
    print("[查找学生]: 开始")
    name = input("请输入要查找的学生姓名: ")
    count = 0   # 记录查找到的学生总数
    for s in students:
        if name == s['name']:
            print(f"[{s['studentId']}]\t{s['name']}\t{s['gender']}\t{s['className']}")
            count += 1

    print(f"[查找学生]: 完成\t共查找到{count}个匹配的学生")

def Delete():
    print("[删除学生]：开始")
    studentId = input("输入要删除的学生的学号: ")

    for s in students:
        if(studentId == s['studentId']):
            print(f"删除了学生{s['name']}")
            students.remove(s)  #列表调用remove进行删除

    # 保存此时数据
    save()

    print("[删除学生]：完成")


def main():
    # 入口函数（主函数）

    # 通过控制台交互
    print("---------------------------------------------------")
    print("                    学生管理系统                     ")
    print("---------------------------------------------------")

    # 开始前先调用load，读取数据
    load()

    while True:
        # menu() 菜单
        choice = menu()
        if choice == '1':
            Add()
        elif choice == '2':
            Display()
        elif choice == '3':
            Find()
        elif choice == '4':
            Delete()
        elif choice == '0':
            print("学生管理系统: 退出成功！")
            sys.exit(0)
        else:
            print("输入有误, 重新输入")

main()